package com.jf.car.controller;

import com.alibaba.fastjson.JSON;
import com.google.code.kaptcha.Constants;
import com.jf.car.bean.Userinfo;
import com.jf.car.service.UserinfoService;
import com.jf.car.service.impl.UserinfoServiceImpl;
import com.jf.car.util.MyConstants;
import com.jf.car.util.MyUtils;
import com.jf.car.util.ResultJson;


import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;

@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /*将请求转发到 /WEB-INF/pages/admin/index.jsp 页面，也就是返回登录页面给客户端。*/
        request.getRequestDispatcher("/WEB-INF/pages/admin/index.jsp").forward(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        UserinfoService userinfoService = new UserinfoServiceImpl();
        /*创建Userinfo对象,用于封装存入的账号密码*/
        Userinfo userinfo =new Userinfo();
        /*从请求参数中获取用户输入的账号密码,并存入Userinfo对象中*/
        userinfo.setUsername(request.getParameter("username"));
        userinfo.setPassword(request.getParameter("password"));
        /*从请求参数中获取用户输入的验证码*/
        String code = request.getParameter("code");

        /*获取当前请求的会话对象*/
        HttpSession session = request.getSession();
        /*比较用户输入的验证码和会话中存储的验证码（忽略大小写）。若验证码正确，则继续进行用户名和密码验证；若不正确，则返回 “验证码不正确！”。*/
        if(code.equalsIgnoreCase(session.getAttribute(Constants.KAPTCHA_SESSION_KEY).toString())){
            /*调用 UserinfoService 的 login 方法进行用户名和密码验证，返回验证后的 Userinfo 对象。*/
            userinfo = userinfoService.login(userinfo);
            /*若 userinfo 不为 null，表示用户名和密码正确*/
            if(userinfo != null){
                /*检查用户状态，如果为1,则登录成功,否则,显示账号封禁*/
                if(userinfo.getStatus() == 1){
                    /*获取记住密码选项*/
                    String remember = request.getParameter("remember");
                    /*cookie的名称为cookieId,value为userinfo对应的id*/
                    Cookie cookie = new Cookie(MyConstants.LOGIN_COOKIE_KEY,userinfo.getId().toString());
                    if (MyUtils.isStringNotEmpty(remember)){
                        cookie.setMaxAge(60*60*24*7);/*设置7天有效期*/
                    }
                    response.addCookie(cookie);
                    /*登录用户存入session作用域*/
                    session.setAttribute(MyConstants.LOGIN_SESSION_KEY,userinfo);
                    response.getWriter().println(JSON.toJSON(ResultJson.success()));
                }else{
                    response.getWriter().println(JSON.toJSON(ResultJson.error("该账号已封禁，请联系管理员！")));
                }
            }else{
                response.getWriter().println(JSON.toJSON(ResultJson.error("用户名或密码不正确！")));
            }
        }else{
            response.getWriter().println(JSON.toJSON(ResultJson.error("验证码不正确！")));
        }
    }
}
